健康统计集合(HealthStatisticsCollection)

HealthStatisticsCollection 类用于表示按时间分组的健康统计数据集合,如每日、每周或每月的汇总统计。集合中的每一项代表一个时间区间,并对应一个 HealthStatistics 实例,包含该时间段内的统计信息。

该类特别适用于:

  • 绘制健康数据的时间趋势图
  • 生成按日/周/月分组的报告
  • 按日期区间访问统计数据

总览

每一个 HealthStatisticsCollection

  • 是通过按时间查询健康数据获得的
  • 基于 anchorDate 和 intervalComponents(如每日、每周)进行时间对齐
  • 可选支持按来源(如设备、App)聚合

方法说明

sources(): HealthSource[]

返回一个数组,包含所有为此集合提供数据的 HealthSource(数据来源)。

每个 HealthSource 表示一个设备或 App(如 Apple Watch、iPhone、第三方健康应用等)。

示例:

1const sources = collection.sources()
2sources.forEach(source => {
3  console.log("来源:", source.name, source.bundleIdentifier)
4})

statistics(): HealthStatistics[]

返回此集合中所有时间区间的统计数据,每一项为一个 HealthStatistics 实例。

这些统计数据是根据查询时提供的 anchorDate 和 intervalComponents 进行时间对齐的。

示例:

1const allStats = collection.statistics()
2allStats.forEach(stat => {
3  const value = stat.sumQuantity(HealthUnit.count())
4  console.log(`${stat.startDate}${stat.endDate}:共计 ${value}`)
5})

statisticsFor(date: Date): HealthStatistics | null

根据指定的日期查找该日期所在的时间区间对应的 HealthStatistics 实例。

如果该日期不属于任何时间区间,将返回 null

示例:

1const stat = collection.statisticsFor(new Date("2025-07-01"))
2if (stat) {
3  const value = stat.averageQuantity(HealthUnit.count())
4  console.log("7月1日的平均值:", value)
5} else {
6  console.log("7月1日无数据")
7}

使用场景

当你需要:

  • 将健康数据按日/周/月分组展示
  • 分析健康趋势
  • 为用户生成历史数据图表或报告

时,推荐使用 HealthStatisticsCollection